# 作者： 李泉志
# 2025年01月03日20时50分秒
# 2947029073@qq.com
"""
Python中不需要指定类型，有str、bool、int、float；
数据类型可分为数字型和非数字型
整形(int)：无溢出问题，初始分配28字节
"""
a = 1
b = 1
print(id(a))  # id()是取地址
print(id(b))
# 运行发现a，b地址一样，因为python数据和变量分离
a = 2
print(id(a))  # 运行发现a=2的地址不一样
print(type(a))  # type()查看类型

"""
进制：2进制 bin 0b
8进制 oct
16进制 hex
"""
a = 123
print(bin(a))  # 将整数转换成二进制
print(oct(a))
print(hex(a))

"""
python不直接以补码输出
"""
b = -5
print(bin(b))  # 不会输出补码(-0b101)

"""
浮点型(float)：双精度64bit，提供大约17位的精度和范围从-308到308的指数
"""
f = 123.12345678901234567890
print(f)  # 结果123.12345678901235

"""
布尔型bool，True为正(非0即真)，False为0，直接输出结果为True，但做加法输出值
"""


def use_bool():
    print(True)
    print(True + 1)


use_bool()
"""
复数型complex：主要用于科学计算
"""


def use_complex():
    c = complex(3, 4)
    print("c is %d+%dj" % (c.real, c.imag))


use_complex()

"""
非数字型：字符串、列表、元组、字典、集合；
读取标准输入input
转义字符：\t制表,\n换行
"""


def use_str():
    srt1 = 'a'
    print(type(srt1))  # 单引号里就一个字母看作字符串，没有单独的字符类型
    str2 = 'abc'
    print(type(str2))
    str3 = "abc'def"  # 双引号里可以有单引号，会显示
    print(str3)
    str4 = 'abc\nbcd'
    print(str4)
    str5 = 'abc\'bcd\"'
    print(str5)

    print(ord('0'))  # 字符0的整型值48
    print(chr(48))  # 输出对应ASCII码的字符


use_str()
"""
1)数字型之间可以直接计算
2)字符串变量之间使用’+‘拼接字符串
3)字符串变量可以和整数使用'*'重复拼接相同的字符串
4)数字型变量和字符串之间不能进行其他计算
"""


def use_op():
    first_name = "三"
    last_name = "张"
    name = first_name + last_name
    print(name)

    print("-" * 50)

    # print(5 + last_name)  # TypeError，不能执行 int+str


use_op()

"""
类型转换：int(x),float(x),bool(x),complex(x),str(x)
"""


def change_alpha():
    a = input("请输入")
    print(chr(ord(a) + 32)) #大写转小写


change_alpha()


def change_type():
    a = input('请输入数字')
    print(int(a) + 5)  # 输入4.5直接报错，不能转成整型


change_type()